/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package calpi.util;

import java.util.Comparator;
import calpi.*;
import java.text.Collator;
import java.util.Locale;
/**
 * Classe usada para organizar algum dos objetos usados
 * @author Sem iNick
 */
public final class Comparadores {


    /**
     * Usada para fazer comparações de String usando como local pt-BR
     */
    public static final Collator COLLATOR = Collator.getInstance(new Locale("pt", "BR"));
    
    /**
     * Classe usada para orgazinar o objeto aluno
     * @author Sem iNick
     */
    public static final class ComparaAluno {

        /**
         * Organiza baseando-se no nome do aluno
         */
        public static final Comparator<Aluno> NOME = new Comparator<Aluno>() {

            public int compare(Aluno a1, Aluno a2) {

                COLLATOR.setStrength(Collator.PRIMARY);
                return COLLATOR.compare(a1.getNome(), a2.getNome());
            }
        };

        /**
         * Organiza baseando-se na matrícula do aluno
         */
        public static final Comparator<Aluno> MATRICULA = new Comparator<Aluno>() {

            public int compare(Aluno a1, Aluno a2) {

                int mat1 = a1.getMatricula();
                int mat2 = a2.getMatricula();
                return (mat1 < mat2
                        ?-1
                        :(mat1 == mat2
                         ?0:1));
            }
        };

        /**
         * Organiza os alunos usando seu endereço
         */
        public static final Comparator<Aluno> ENDERECO = new Comparator<Aluno>() {

            public int compare(Aluno a1, Aluno a2) {

                COLLATOR.setStrength(Collator.PRIMARY);
                return COLLATOR.compare(a1.getEndereco(), a2.getEndereco());
            }
        };

        /**
         * Organiza os aluno usando a informação de seu período
         */
        public static final Comparator<Aluno> PERIODO = new Comparator<Aluno>() {

            public int compare(Aluno a1, Aluno a2) {

                int per1 = a1.getPeriodo();
                int per2 = a2.getPeriodo();
                return (per1 < per2
                        ?-1
                        :(per1 == per2
                         ?0:1));
            }
        };

        /**
         * Organiza os alunos usando o nome do curso como comparação
         */
        public static final Comparator<Aluno> CURSO = new Comparator<Aluno>() {

            public int compare(Aluno a1, Aluno a2) {

                return ComparaCurso.NOME.compare(a1.getCurso(), a2.getCurso());
            }
        };
    }

    /**
     * Classe usada para comparar cursos
     */
    public static final class ComparaCurso {

        /**
         * Compara os cursos usando seu nome
         */
        public static final Comparator<Curso> NOME = new Comparator<Curso>() {

            public int compare(Curso c1, Curso c2) {

                COLLATOR.setStrength(Collator.PRIMARY);
                return COLLATOR.compare(c1.getNome(), c2.getNome());
            }
        };

        /**
         * Compara cursos usando seu ID
         */
        public static final Comparator<Curso> ID = new Comparator<Curso>() {

            public int compare(Curso c1, Curso c2) {

                int id1 = c1.getId();
                int id2 = c2.getId();
                return (id1 < id2
                        ?-1
                        :(id1 == id2
                         ?0:1));
            }
        };
    }

    /**
     * Classe usada para comparar disciplinas
     */
    public static final class ComparaDisciplina {

        /**
         * Compara as disciplinas baseando-se na sua descrição
         */
        public static final Comparator<Disciplina> DESCRICAO = new Comparator<Disciplina>() {

            public int compare(Disciplina c1, Disciplina c2) {

                COLLATOR.setStrength(Collator.PRIMARY);
                return COLLATOR.compare(c1.getDescricao(), c2.getDescricao());
            }
        };

        /**
         * Compara as disciplinas baseando-se no seu código
         */
        public static final Comparator<Disciplina> CODIGO = new Comparator<Disciplina>() {

            public int compare(Disciplina c1, Disciplina c2) {

                int cod1 = c1.getCodigo();
                int cod2 = c2.getCodigo();
                return (cod1 < cod2
                        ?-1
                        :(cod1 == cod2
                         ?0:1));
            }
        };
    }

    /**
     * Classe responsável pelo organização dos usuários
     */
    public static final class ComparaUsuarios {

        /**
         * Compara os usuários baseando-se no seus nomes
         */
        public static final Comparator<Usuario> NOME = new Comparator<Usuario>() {

            public int compare(Usuario u1, Usuario u2) {

                COLLATOR.setStrength(Collator.PRIMARY);
                return COLLATOR.compare(u1.getNome(), u2.getNome());
            }
        };

        /**
         * Compara os usuários usando seus logins
         */
        public static final Comparator<Usuario> LOGIN = new Comparator<Usuario>() {

            public int compare(Usuario u1, Usuario u2) {

                COLLATOR.setStrength(Collator.PRIMARY);
                return COLLATOR.compare(u1.getLogin(), u2.getLogin());
            }
        };
    }
}
